package appmodelo.modulo1.servico.ejb.impl;

import java.util.List;

import appmodelo.modulo1.dominio.jpa.EntidadeJPA;
import appmodelo.modulo1.persistencia.ejb.Persistencia;
import appmodelo.modulo1.persistencia.ejb.exception.ConsultarExceptionPersistencia;
import appmodelo.modulo1.persistencia.ejb.exception.ExcluirExceptionPersistencia;
import appmodelo.modulo1.persistencia.ejb.exception.SalvarExceptionPersistencia;
import appmodelo.modulo1.servico.ejb.Servico;
import appmodelo.modulo1.servico.ejb.exception.ConsultarExceptionServicoEjb;
import appmodelo.modulo1.servico.ejb.exception.ExcluirExceptionServicoEjb;
import appmodelo.modulo1.servico.ejb.exception.SalvarExceptionServicoEjb;

public abstract class ServicoGenerico <Entidade extends EntidadeJPA> implements Servico<Entidade> {
    
	protected Persistencia<Entidade> persistencia;
	
	public abstract void setPersistencia();
	
	public Entidade salvar (Entidade entidade) throws SalvarExceptionServicoEjb {
		try {
			return persistencia.salvar(entidade);
		} catch (SalvarExceptionPersistencia e) {
			throw new SalvarExceptionServicoEjb(e);
		}
	}
	
	public void excluir(Object id) throws ExcluirExceptionServicoEjb {
		try {
			persistencia.excluir(id);
		} catch (ExcluirExceptionPersistencia e) {
			throw new ExcluirExceptionServicoEjb(e);
		}
	}
	
	public List<Entidade> listar() throws ConsultarExceptionServicoEjb {
		try {
			return persistencia.listar();
		} catch (ConsultarExceptionPersistencia e) {
			throw new ConsultarExceptionServicoEjb();
		}
	}

	public Entidade consultarPorId(Object id) throws ConsultarExceptionServicoEjb {
		try {
			return persistencia.consultarPorId(id);
		} catch (ConsultarExceptionPersistencia e) {
			throw new ConsultarExceptionServicoEjb(e);
		}
	}
}